package br.folhapagamento.dado;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.folhapagamento.to.FolhaPagamentoTO;

public class DAOFolhaPagamento implements IDAOFolhaPagamento {
	
	private static final String stmntCadastrarFolha = "INSERT INTO folhapagamento "
			+ "(matricula, dataEmissao, descrCargo, numDepentendes, numAnosTrabalho, " +
			"vrSalarioBase, vrBonusTempoServico, vrValeTransporte, vrCestaBasica, " +
			"vrBruto, vrDesconto, vrLiquido) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
	
	private static final String stmtConsultarFolhaPorMatricula = "SELECT * FROM folhapagamento WHERE "
			+ "matricula = ? ";
	
	private static final String stmtConsultarFolhaPorData = "SELECT * FROM folhapagamento WHERE "
			+ "dataEmissao = ? ";
	
	private static final String stmtObterFolha = "SELECT * FROM folhapagamento WHERE "
			+ "matricula = ? and dataEmissao = ? ";	
	
	String msg = "";

	@Override
	public FolhaPagamentoTO obterFolha(int matricula, Date dataEmissao)  throws SQLException {
		ResultSet rs = null;
		PreparedStatement stmt;
		ArrayList<FolhaPagamentoTO> listaFolhaPagamento = null;
		stmt = DAOFactory.criaConexao().prepareStatement(stmtObterFolha);
		stmt.setInt(1, matricula);
		stmt.setDate(2, dataEmissao);
		rs = stmt.executeQuery();
		listaFolhaPagamento = converterParaTO(rs);
		stmt.close();
		return listaFolhaPagamento.get(1);
	}

	@Override
	public ArrayList<FolhaPagamentoTO> consultar(Date dataEmissao)  throws SQLException {
		ResultSet rs = null;
		PreparedStatement stmt;
		ArrayList<FolhaPagamentoTO> listaFolhaPagamento = null;
		stmt = DAOFactory.criaConexao().prepareStatement(stmtConsultarFolhaPorData);
		stmt.setDate(1, dataEmissao);
		rs = stmt.executeQuery();
		listaFolhaPagamento = converterParaTO(rs);
		stmt.close();

		return listaFolhaPagamento;
	}
	
	@Override
	public ArrayList<FolhaPagamentoTO> consultar(int matricula)  throws SQLException {
		ResultSet rs = null;
		PreparedStatement stmt;
		ArrayList<FolhaPagamentoTO> listaFolhaPagamento = null;
		stmt = DAOFactory.criaConexao().prepareStatement(stmtConsultarFolhaPorMatricula);
		stmt.setInt(1, matricula);
		rs = stmt.executeQuery();
		listaFolhaPagamento = converterParaTO(rs);
		stmt.close();

		return listaFolhaPagamento;
	}
	
	private ArrayList<FolhaPagamentoTO> converterParaTO(ResultSet rs) throws SQLException{
		ArrayList<FolhaPagamentoTO> listaFolhaPagamento = new ArrayList<FolhaPagamentoTO>();
		while(rs.next()){

			listaFolhaPagamento.add(new FolhaPagamentoTO(rs.getInt("matricula"), 
										rs.getDate("dataEmissao"), 
										rs.getString("descrCargo"),
										rs.getInt("numDepentendes"),
										rs.getInt("numAnosTrabalho"),
										rs.getBigDecimal("vrSalarioBase"),
										rs.getBigDecimal("vrBonusTempoServico"),
										rs.getBigDecimal("vrValeTransporte"),
										rs.getBigDecimal("vrCestaBasica"),
										rs.getBigDecimal("vrBruto"),
										rs.getBigDecimal("vrDesconto"),
										rs.getBigDecimal("vrLiquido")));
		}
		return listaFolhaPagamento;
	}
	
	@Override
	public int cadastrar(FolhaPagamentoTO folhaPagamento)  throws SQLException{
		PreparedStatement stmt;
		int rc = 0;
		stmt = DAOFactory.criaConexao().prepareStatement(stmntCadastrarFolha);

		stmt.setInt(1, folhaPagamento.getMatricula());
		stmt.setDate(2, folhaPagamento.getDataEmissao());
		stmt.setString(3, folhaPagamento.getDescrCargo());
		stmt.setInt(4, folhaPagamento.getNumDepentendes());
		stmt.setInt(5, folhaPagamento.getNumAnosTrabalho());
		stmt.setBigDecimal(6, folhaPagamento.getVrSalarioBase());

		stmt.setBigDecimal(7, folhaPagamento.getVrSalarioBase());
		stmt.setBigDecimal(8, folhaPagamento.getVrBonusTempoServico());
		stmt.setBigDecimal(9, folhaPagamento.getVrValeTransporte());
		stmt.setBigDecimal(10, folhaPagamento.getVrCestaBasica());
		stmt.setBigDecimal(11, folhaPagamento.getVrBruto());
		stmt.setBigDecimal(12, folhaPagamento.getVrDesconto());
		stmt.setBigDecimal(13, folhaPagamento.getVrLiquido());

		rc = stmt.executeUpdate();
		stmt.close();
		return rc;
	}

	public String getMessage() {
		return msg;
	}

}
